package utils

import (
	"fmt"
	"lottery/datasource"
)

// 生成要锁的键名
func getLuckyLockKey(uid int) string {
	return fmt.Sprintf("lucky_lock_%d", uid)
}

func lockLuckyServ(uid int) bool {
	key := getLuckyLockKey(uid)
	cacheObj := datasource.InstanceCache()

	// "EX seconds": 设置键key的过期时间，单位时秒
	// "NX" : 只有键key不存在的时候才会设置key的值
	reply, _ := cacheObj.Do("SET", key, 1, "EX", 3, "NX")
	if reply == "OK" {
		return true
	} else {
		return false
	}
}

func unlockLuckyServ(uid int) bool {
	key := getLuckyLockKey(uid)
	cacheObj := datasource.InstanceCache()

	reply, _ := cacheObj.Do("DEL", key)
	if reply == "OK" {
		return true
	} else {
		return false
	}
}

// 对外方法
// 加锁，抽奖时需要用到的锁，避免一个用户并发多次抽奖
func LockLucky(uid int) bool {
	return lockLuckyServ(uid)
}

// 解锁，抽奖时需要用到的锁，避免一个用户并发多次抽奖
func UnlockLucky(uid int) bool {
	return unlockLuckyServ(uid)
}
